home *** CD-ROM | disk | FTP | other *** search
- ;BASIC-Erweiterung Hex-Zahlen
- ;_
- :chrget = $0073 ;Zeichen aus BASIC-Text lesen
- :chrgot = $0079 ;letztes Zeichen nochmal lesen
-
- :fctvec = $30a ;Vektor fuer Ausdruck auswerten
-
- :tofac = $bc49 ;positive Integerzahl in FAC
-
- org $801 ;Start am BASIC-Anfang
-
- :next w basend ;Pointer auf Ende
- :linnum w 1987 ;Zeilennummer
- :sys b $9e ;Token fuer SYS
- :adrs b "2070" ;Adresse im Klartext
- :linend b 0 ;Kennzeichen fuer Zeilenende
- :basend w 0 ;Kennzeichen fuer Programmende
-
- s 2070-*
-
- :init lda #<new ;BASIC-Anfang hinter
- sta $2b ;Programm verlegen
- lda #>new
- sta $2c
-
- lda fctvec ;zeigt Vektor schon
- ldy fctvec+1 ;auf eigene Routine?
- cmp #<function
- bne biegen ;nein
- cpy #>function
- beq okay ;ja, dann so lassen
- sta rueck+1 ;sonst retten
- sty rueck+2
- :biegen lda #<function ;und auf eigene
- sta fctvec ;Routine verbiegen
- lda #>function
- sta fctvec+1
- :okay jsr $a659 ;RESTORE
- jmp $a7ae ;RUN
-
- ;Hier beginnt die Hex-Eingabe-Routine
- ;_
- :function jsr chrget ;Zeichen holen
- cmp #'$ ;Kennzeichen fuer Hex
- beq hexin
- ldx $7a ;sonst CHRGET-Pointer
- bne nodec ;wiederherstellen
- dec $7b
- :nodec dec $7a
- :rueck jmp $ae86 ;und zur alten Adtresse
-
- :hexin lda #$00
- sta $0d ;Ergebnis wird numerisch
- sta argu ;loeschen
- sta argu+1
- :mloop jsr chrget;naechstes Zeichen
- cmp #'0
- bcc raus ;kleiner als Ziffern
- cmp #'9+1
- bcc add ;Ziffer
- cmp #'a
- bcc raus ;kein Buchstabe
- cmp #'f+1
- bcs raus ;keine Hex-Ziffer
- sec
- sbc #7 ;Offset fuer a
- :add and #$0f ;unteres Nibble maskieren
- ldx #4 ;vier Bits
- :adlop asl argu ;links-schieben
- rol argu+1
- dex
- bne adlop
- ora argu ;gelesene Ziffer addieren
- sta argu
- jmp mloop ;naechstes Zeichen
-
- :raus lda argu+1
- ldy argu
- sta $62 ;fuer TOFAC
- sty $63
- ldx #$90 ;auch fuer TOFAC
- sec
- jmp tofac
-
- :argu w 0
-
- :ende b 0
- :new w 0
-
-